home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / include / dev / RCS / pfs.h,v < prev    next >
Text File  |  1989-08-24  |  8KB  |  292 lines

  1. head     1.6;
  2. branch   ;
  3. access   ;
  4. symbols  ;
  5. locks    ; strict;
  6. comment  @ * @;
  7.  
  8.  
  9. 1.6
  10. date     89.08.24.15.54.03;  author mendel;  state Exp;
  11. branches ;
  12. next     1.5;
  13.  
  14. 1.5
  15. date     89.06.08.15.42.43;  author brent;  state Exp;
  16. branches ;
  17. next     1.4;
  18.  
  19. 1.4
  20. date     89.06.08.15.36.26;  author brent;  state Exp;
  21. branches ;
  22. next     1.3;
  23.  
  24. 1.3
  25. date     89.03.13.08.56.58;  author brent;  state Exp;
  26. branches ;
  27. next     1.2;
  28.  
  29. 1.2
  30. date     89.01.26.09.19.58;  author brent;  state Exp;
  31. branches ;
  32. next     1.1;
  33.  
  34. 1.1
  35. date     89.01.19.09.35.30;  author brent;  state Exp;
  36. branches ;
  37. next     ;
  38.  
  39.  
  40. desc
  41. @Definitions for pseudo-file-systems
  42. @
  43.  
  44.  
  45. 1.6
  46. log
  47. @Changed to use new fs names.
  48. @
  49. text
  50. @/*
  51.  * pfs.h --
  52.  *
  53.  *    Declarations of the kernel/user-level-server interface for
  54.  *    pseudo-file-systems. The pseudo-file-system interface uses
  55.  *    the request-response protocol defined for pseudo-devices
  56.  *    to forward file system naming operations to the pseudo-file-system
  57.  *    server process.
  58.  *
  59.  *    A more complete explaination of pseudo-file-systems should be in
  60.  *    the man page (/sprite/doc/ref/devices/pfs), and the pseudo-device
  61.  *    interface document is (/sprite/doc/ref/devices/pdev).
  62.  *
  63.  *    The kernel-to-server interface is based on a set of typed messages,
  64.  *    one for each operation implemented by the server.  Each message
  65.  *    has a header of type Pfs_Request, which in turn embeds some
  66.  *    operation-specific parameters.  Following the parameters is a variable
  67.  *    length block of data, generally a pathname.  Most of the parameters
  68.  *    are kernel structures defined in fsNameOps.h.
  69.  *    
  70.  * Copyright 1989 Regents of the University of California
  71.  * All rights reserved.
  72.  * Permission to use, copy, modify, and distribute this
  73.  * software and its documentation for any purpose and without
  74.  * fee is hereby granted, provided that the above copyright
  75.  * notice appear in all copies.  The University of California
  76.  * makes no representations about the suitability of this
  77.  * software for any purpose.  It is provided "as is" without
  78.  * express or implied warranty.
  79.  *
  80.  *
  81.  * $Header: /sprite/src/lib/include/dev/RCS/pfs.h,v 1.5 89/06/08 15:42:43 brent Exp Locker: brent $ SPRITE (Berkeley)
  82.  */
  83.  
  84. #ifndef _PFS
  85. #define _PFS
  86.  
  87. #include "dev/pdev.h"
  88.  
  89. #ifdef KERNEL
  90. #include "fsNameOps.h"
  91. #else
  92. #include <kernel/fsNameOps.h>
  93. #endif
  94.  
  95. /*
  96.  * Pseudo-filesystem pathname operations
  97.  *    PFS_OPEN        Open a file in the pseudo-filesystem.
  98.  *    PFS_GET_ATTR        Get attributes given a pathname in a pfs.
  99.  *    PFS_SET_ATTR        Set attributes given a pathname in a pfs.
  100.  *    PFS_MAKE_DEVICE        Make a device
  101.  *    PFS_MAKE_DIR        Make a directory
  102.  *    PFS_REMOVE        Remove a file
  103.  *    PFS_REMOVE_DIR        Remove a directory
  104.  *    PFS_RENAME        Rename a file
  105.  *    PFS_HARD_LINK        Make a hard link between two files.
  106.  *    PFS_DOMAIN_INFO        Return information about the pseudo-file-system
  107.  */
  108.  
  109. #define PFS_OPEN        10
  110. #define PFS_GET_ATTR        11
  111. #define PFS_SET_ATTR        12
  112. #define PFS_MAKE_DEVICE        13
  113. #define PFS_MAKE_DIR        14
  114. #define PFS_REMOVE        15
  115. #define PFS_REMOVE_DIR        16
  116. #define PFS_RENAME        17
  117. #define PFS_HARD_LINK        18
  118. #define PFS_SYM_LINK        19
  119. #define PFS_DOMAIN_INFO        20
  120.  
  121. /*
  122.  * When a naming operation is done in a pseudo-filesystem the pfs server
  123.  * gets a message of the following format.  Data, usually a single pathname,
  124.  * follows this message/parameter block.  The results of most of these
  125.  * operations is only an error status and there are no associated typedefs.
  126.  * Exceptions are GET_ATTR, which returns a Fs_GetAttributes struct,
  127.  * OPEN, and DOMAIN_INFO.  See IOC_PFS_OPEN or IOC_PFS_PASS_STREAM for an
  128.  * explaination of how opens are handled.  The DOMAIN_INFO operation takes
  129.  * the fileID that is the handle on the top-level directory (prefix) of
  130.  * the domain and the return value is a Fs_DomainInfo struct.
  131.  */
  132.  
  133. typedef struct {
  134.     Pdev_RequestHdr    hdr;    /* with PFS_REQUEST_MAGIC */
  135.     union {            /* Additional parameters to the operation. */
  136.     Fs_OpenArgs        open;
  137.     Fs_OpenArgs        getAttr;
  138.     Fs_OpenArgs        setAttr;
  139.     Fs_MakeDeviceArgs    makeDevice;
  140.     Fs_OpenArgs        makeDir;
  141.     Fs_LookupArgs        remove;
  142.     Fs_LookupArgs        removeDir;
  143.     Fs_2PathParams        rename;
  144.     Fs_2PathParams        hardLink;
  145.     Fs_OpenArgs        symLink;
  146.     Fs_FileID        domainInfo;
  147.     } param;
  148. } Pfs_Request;
  149.  
  150. #define PFS_REQUEST_MAGIC    0x73657C6B
  151.  
  152. /*
  153.  * When a PFS_SET_ATTR operation is done the data that follows the message hdr
  154.  * has the following format.  The file name comes at the end and its true
  155.  * length is given in the nameLength field.
  156.  */
  157.  
  158. typedef struct {
  159.     Fs_Attributes    attr;        /* Attribute values */
  160.     int            flags;        /* Indicates which attributes to set */
  161.     int            nameLength;    /* Number of bytes in name */
  162.     char        name[4];    /* Actually larger */
  163. } Pfs_SetAttrData;
  164.  
  165. /*
  166.  * I/O Controls specific to pseudo-filesystem servers
  167.  *    IOC_PFS_OPEN        This is used instead of IOC_PDEV_REPLY to
  168.  *                respond to a PFS_OPEN request.  This reply
  169.  *                causes a new pseudo-device connection between
  170.  *                the server and the opening client.  The result
  171.  *                of this I/O control is a new streamID for
  172.  *                the server's half of the connection.  Unlike
  173.  *                pseudo-device servers, there is no need to
  174.  *                read a control stream to get this streamID,
  175.  *                it is returned as a result of this IOC.
  176.  *    IOC_PFS_SET_ID        This is used to set the file ID associated
  177.  *                with a connection to a pseudo-filesystem server.
  178.  *                There will be a naming connection, and perhaps
  179.  *                many more pdev-like connections that represent
  180.  *                files.  The ID set by this call we be passed in
  181.  *                as the 'prefixID' and 'rootID' fields of
  182.  *                the arguments to naming operations.  If this
  183.  *                call is not used then the kernel's own
  184.  *                fileIDs (which are unique, anyway) are used.
  185.  *    IOC_PFS_PASS_STREAM    This is used instead of IOC_PDEV_REPLY to
  186.  *                respond to a PFS_OPEN request.  This reply
  187.  *                passes the stream indicated by the input
  188.  *                streamID to the client as the result of its
  189.  *                open request.  Thus the pseudo-filesystem
  190.  *                server can open a file/device/whatever on
  191.  *                behalf of its client and return the open file.
  192.  *                The pseudo-filesystem server won't see any
  193.  *                more I/O operations, or the close.
  194.  */
  195.  
  196. #define IOC_PFS            (6 << 16)
  197. #define IOC_PFS_OPEN        (IOC_PFS | 0x1)
  198. #define IOC_PFS_SET_ID        (IOC_PFS | 0x2)
  199. #define IOC_PFS_PASS_STREAM    (IOC_PFS | 0x3)
  200.  
  201. #endif _PFS
  202. @
  203.  
  204.  
  205. 1.5
  206. log
  207. @Fixed typo
  208. @
  209. text
  210. @d32 1
  211. a32 1
  212.  * $Header: /sprite/src/lib/include/dev/RCS/pfs.h,v 1.3 89/03/13 08:56:58 brent Exp $ SPRITE (Berkeley)
  213. d87 10
  214. a96 10
  215.     FsOpenArgs        open;
  216.     FsOpenArgs        getAttr;
  217.     FsOpenArgs        setAttr;
  218.     FsMakeDeviceArgs    makeDevice;
  219.     FsOpenArgs        makeDir;
  220.     FsLookupArgs        remove;
  221.     FsLookupArgs        removeDir;
  222.     Fs2PathParams        rename;
  223.     Fs2PathParams        hardLink;
  224.     FsOpenArgs        symLink;
  225. @
  226.  
  227.  
  228. 1.4
  229. log
  230. @Added PFS_DOMAIN_INFO
  231. @
  232. text
  233. @d97 1
  234. a97 1
  235.     FsFileID        domainInfo;
  236. @
  237.  
  238.  
  239. 1.3
  240. log
  241. @Changed the Pfs_Request to contain explicit union members
  242. for each operation instead of lumping together everything
  243. with FsLookupArgs, FsOpenArgs, etc.
  244. @
  245. text
  246. @d32 1
  247. a32 1
  248.  * $Header: /sprite/src/lib/include/dev/RCS/pfs.h,v 1.2 89/01/26 09:19:58 brent Exp Locker: brent $ SPRITE (Berkeley)
  249. d57 1
  250. d70 1
  251. d74 8
  252. a81 1
  253.  * gets a message of the following format.
  254. d97 1
  255. d101 1
  256. a101 1
  257. #define PFS_REQUEST_MAGIC    0x73657C6A
  258. @
  259.  
  260.  
  261. 1.2
  262. log
  263. @Fixed name
  264. @
  265. text
  266. @d32 1
  267. a32 1
  268.  * $Header: /sprite/src/lib/include/dev/RCS/pfs.h,v 1.1 89/01/19 09:35:30 brent Exp $ SPRITE (Berkeley)
  269. d79 2
  270. a80 1
  271.     FsLookupArgs        lookup;
  272. d82 3
  273. d86 2
  274. @
  275.  
  276.  
  277. 1.1
  278. log
  279. @Initial revision
  280. @
  281. text
  282. @d2 1
  283. a2 1
  284.  * pdev.h --
  285. d21 1
  286. a21 1
  287.  * Copyright 1987 Regents of the University of California
  288. d32 1
  289. a32 1
  290.  * $Header: /sprite/src/lib/include/dev/RCS/pdev.h,v 1.11 88/11/17 09:03:52 brent Exp Locker: brent $ SPRITE (Berkeley)
  291. @
  292.